import cn.gov.sdcj.accountancy.rule.RuleManager

import static java.util.Calendar.MONTH
import static java.util.Calendar.YEAR

/**
 * <p>Description: </p>
 * Created by laijie on 2014/12/19.
 */

/**
 * 自定义的规则
 */
def rule_501_505 = { context ->     // 可定义参数，一般是上下文参数
    def bdgtType2AcctNum = ['2': '501', '4': '505']
    def bdgtType2AcctName = ['2': '基本支出', '4': '基金支出']
    科目编码 bdgtType2AcctNum[context.bdgtType]
    科目名称 bdgtType2AcctName[context.bdgtType]
    金额 context.amt
    // 定义规则时，若有参数的，必须返回该参数，以传递到下一条规则中去
    return context
}

def rule_bdgt2accout = { context ->
    科目编码 ".${context.bdgtId[0..2]}.${context.bdgtId[3..4]}.${context.bdgtId[5..6]}"
    科目名称 "--${context.bdgtName}"
    context
}

def ruleA = { context ->
    def src2AcctNum = ['000': '11', '100': '12', '200': '13', '064': '14', '051': '21', '151': '22', '251': '23']
    科目编码 ".${context.payType}.${src2AcctNum[context.srcId] ?: '01'}"
    科目名称 "--$context.payTypeName--$context.srcName"
    context
}

/**
 * 定义模板，支持中英文（中文时请使用UTF-8编码）
 */
def template1 = { context, vo1, vo2 ->
    凭证 {
        制单人 vo1.name
        业务日期 vo2.date
        年 vo2.date[YEAR]
        期间 vo2.date[MONTH] + 1
        凭证字 '记'
        借 {
            科目编码 '102';
            科目名称 '银行科目';
            金额 context.amt;
            摘要 '测试中文'
            单位 {
                核算编码 context.unitId
                核算名称 context.unitName
            }
            项目 {
                核算编码 context.projectId
                核算名称 context.projectName
            }
        }
        贷 {
            科目编码  '103'
            科目名称 '授权额度'
            金额 context.amt
            关联记录 {
                类名 context.getClass()?.simpleName
                标识号 context.id
            }
        }
    }
    凭证 {
        凭证字 '收'
        借 rule_501_505.curry(context) >> rule_bdgt2accout >> ruleA >> { 摘要 '总规则' }
        贷 {
            科目编码 '103'
            科目名称 '授权额度'
            金额 context.amt
        }
    }
}

def tem2 = { zck, vo1, vo2 ->
    凭证 {
        制单人 vo1.name
        业务日期 vo2.date
        年 vo2.date[YEAR]
        期间 vo2.date[MONTH] + 1
        借 {
            科目编码 "121.02"
            科目名称 "一级科目--暂存款"
            金额 zck.amt
            核算 {
                核算类别 "单位"
                核算编码 zck.unitId
                核算名称 zck.unitName
            }
            项目 {
                核算编码 zck.projectId
                核算名称 zck.projectName
            }
        }
        贷 {
            科目编码 "121.02"
            科目名称 "一级科目--暂存款"
            金额 zck.amt
            核算 {
                核算类别 "单位"
                核算编码 zck.unitId
                核算名称 zck.unitName
            }
        }
    }
}

// 注册模板
RuleManager.reg("T1", template1)
RuleManager.reg("T2", tem2)
